/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans.dao;

import beans.DiscapacidadTratamiento;
import beans.MedicamentoDiscapacidad;
import beans.TerapiaDiscapacidad;
import beans.Tratamiento;
import core.bd;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;
import v.Evaluacion_View_Add.SetTerapiasMedicamentos;

/**
 *
 * @author Usuario
 */
public class DiscapacidadTratamientoDAO {
    
    public static void guardarItem(DiscapacidadTratamiento trat) throws Exception{
        
        Connection conexion = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        
        try{
            conexion = bd.getConexion();
            
            statement = conexion.prepareStatement("INSERT INTO discapacidad_tratamiento("
                    + "id_discapacidad, id_tratamiento) "
                    + "VALUES (?, ?);");
            statement.setInt(1, trat.getIdDiscapacidad());
            statement.setInt(2, trat.getTratamiento().getId());
            
            statement.executeUpdate();
            
            //obtenemos el ultimo id generado en el DBMS.
            //se podria utilizar otro metodo, como currval('seqname').
            statement = conexion.prepareStatement("select id_discapacidad_tratamiento from discapacidad_tratamiento "
                    + "order by id_discapacidad_tratamiento desc limit 1");

            rs = statement.executeQuery();
            Long idGenerado = null;
            if (rs.next()) {
                idGenerado = (rs.getLong("id_discapacidad_tratamiento"));
                trat.setId(idGenerado.intValue());
                for(MedicamentoDiscapacidad med : trat.getMedicamentosDiscapacidad()){
                    med.setDiscapacidadTratamiento(trat);
                    MedicamentoDiscapacidadDAO.guardarItem(med);
                }
                for(TerapiaDiscapacidad ter: trat.getTerapiasDiscapacidad()){
                    ter.setDiscapacidadTratamiento(trat);
                    TerapiaDiscapacidadDAO.guardarItem(ter); 
                }
            }
            
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
//            bd.liberaConexion(conexion);
//            bd.liberarStatement(statement);
        }
    }
    
    public static Set<DiscapacidadTratamiento> getDiscapacidadesTratamiento(){
        
        return null;
    }
    
    public static Set<DiscapacidadTratamiento> getDiscapacidadesTratamiento(
            Tratamiento tratamiento) {

        Set<DiscapacidadTratamiento> discTratamientos =
                new HashSet<DiscapacidadTratamiento>();
        Connection conexion = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        DiscapacidadTratamiento discTrat = new DiscapacidadTratamiento();

        
        try {
            conexion = bd.getConexion();
            statement = conexion.prepareStatement(""
                    + "select * from discapacidad_tratamiento natural join "
                    + "discapacidad where id_tratamiento = ?");
            statement.setInt(1, tratamiento.getId());
            rs = statement.executeQuery();
            while (rs.next()) {
                discTrat.setId(rs.getInt("id_discapacidad_tratamiento"));
                discTrat.setIdDiscapacidad(rs.getInt("id_discapacidad"));
                discTrat.setTratamiento(tratamiento);
                discTrat.setDiscapacidad(rs.getString("descripcion"));
                discTrat.setMedicamentosDiscapacidad(
                        MedicamentoDiscapacidadDAO.getMedicamentosActivos(discTrat));
                discTrat.setTerapiasDiscapacidad(
                        TerapiaDiscapacidadDAO.getTerapiasActivas(discTrat));
                
                discTratamientos.add(discTrat);
                
                discTrat = new DiscapacidadTratamiento();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return discTratamientos;
    }

    public static void guardarNuevosElementos(DiscapacidadTratamiento disc, SetTerapiasMedicamentos setTerMed) throws Exception {
        for(TerapiaDiscapacidad terapia: setTerMed.nuevasTer){
            terapia.setDiscapacidadTratamiento(disc);
            TerapiaDiscapacidadDAO.guardarItem(terapia);
        }
        for(MedicamentoDiscapacidad medicamento: setTerMed.nuevosMedic){
            medicamento.setDiscapacidadTratamiento(disc);
            MedicamentoDiscapacidadDAO.guardarItem(medicamento);
        }
    }
}
